/**
 * 从后往前填，先比较最后的值的大小，
 * 大的填入后面，依次递减
 */
class Solution1 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i=m-1;
        int j=n-1;
        int k=m+n-1;
        int cur = 0;
        while(i>=0 || j>=0){
            if(j == -1){
                nums1[k--] = nums1[i--];
            }else if(i == -1){
                nums1[k--] = nums2[j--];
            }else if(nums1[i]<=nums2[j]){
                nums1[k--] = nums2[j--];
            }else{
                nums1[k--] = nums1[i--];
            }
        }
    }
}

/**
 * 创建一个数组，从前往后比较，将较小值从前往后放入创建的数组，
 * 为什么创建一个数组？
 * 因为直接给 nums1 赋值会改变原来的值。
 */
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i=0;
        int j=0;
        int k=0;
        int[] nums = new int[m+n];
        while(i<m || j<n){
            if(j == n){
                nums[k++] = nums1[i++];
            }else if(i == m){
                nums[k++] = nums2[j++];
            }else if(nums1[i]<=nums2[j]){
                nums[k++] = nums1[i++];
            }else{
                nums[k++] = nums2[j++];
            }
        }
        for(i=0;i<m+n;i++){
            nums1[i] = nums[i];
        }
    }
}

/**
 * 还可以将nums2放入nums1中，再排序
 */
public class Test {

}
